home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Telnet / NCSA / tn3270 2.3d26 source / MPW changes / CIncludes / Sound.h
Text File  |  1990-09-25  |  6KB  |  280 lines

  1. /************************************************************
  2.  
  3. Created: Saturday, September 16, 1989 at 5:42 PM
  4.     Sound.h
  5.     C Interface to the Macintosh Libraries
  6.  
  7.  
  8.     Copyright Apple Computer, Inc.    1986-1989
  9.     All rights reserved
  10.  
  11. ************************************************************/
  12.  
  13.  
  14. #ifndef __SOUND__
  15. #define __SOUND__
  16.  
  17. #ifndef __TYPES__
  18. #include <Types.h>
  19. #endif
  20.  
  21. #define swMode -1
  22. #define ftMode 1
  23. #define ffMode 0
  24. #define synthCodeRsrc 'snth'
  25. #define soundListRsrc 'snd '
  26.  
  27. /* synthesizer numbers for SndNewChannel */
  28.  
  29. #define noteSynth 1                 /*note synthesizer*/
  30. #define waveTableSynth 3            /*wave table synthesizer*/
  31. #define sampledSynth 5                /*sampled sound synthesizer*/
  32. #define midiSynthIn 7                /*MIDI synthesizer in*/
  33. #define midiSynthOut 9                /*MIDI synthesizer out*/
  34.  
  35. /* Param2 values */
  36.  
  37. #define midiInitChanFilter 0x10     /*set to initialize a MIDI channel*/
  38. #define midiInitRawMode 0x100        /*set to send raw MIDI data*/
  39. #define twelthRootTwo 1.05946309434
  40. #define infiniteTime 0x7FFFFFFF
  41.  
  42. /* command numbers for SndDoCommand */
  43.  
  44. #define nullCmd 0
  45. #define initCmd 1
  46. #define freeCmd 2
  47. #define quietCmd 3
  48. #define flushCmd 4
  49. #define waitCmd 10
  50. #define pauseCmd 11
  51. #define resumeCmd 12
  52. #define callBackCmd 13
  53. #define syncCmd 14
  54. #define emptyCmd 15
  55. #define tickleCmd 20
  56. #define requestNextCmd 21
  57. #define howOftenCmd 22
  58. #define wakeUpCmd 23
  59. #define availableCmd 24
  60. #define versionCmd 25
  61. #define scaleCmd 30
  62. #define tempoCmd 31
  63. #define noteCmd 40
  64. #define restCmd 41
  65. #define freqCmd 42
  66. #define ampCmd 43
  67. #define timbreCmd 44
  68. #define waveTableCmd 60
  69. #define phaseCmd 61
  70. #define soundCmd 80
  71. #define bufferCmd 81
  72. #define rateCmd 82
  73. #define midiDataCmd 100
  74. #define setPtrBit 0x8000
  75. #define stdQLength 128
  76. #define dataPointerFlag 0x8000
  77. #define initChanLeft 2                /*left stereo channel */
  78. #define initChanRight 3             /*right stereo channel*/
  79. #define initChan0 4                 /*channel 0 - wave table only*/
  80. #define initChan1 5                 /*channel 1 - wave table only*/
  81. #define initChan2 6                 /*channel 2 - wave table only*/
  82. #define initChan3 7                 /*channel 3 - wave table only*/
  83. #define initSRate22k 0x20            /*22k sampling rate*/
  84. #define initSRate44k 0x30            /*44k sampling rate*/
  85. #define initMono 0x80                /*monophonic channel*/
  86. #define initStereo 0xC0             /*stereo channel*/
  87. #define firstSoundFormat 1            /*first and only version we can deal with*/
  88.  
  89. typedef unsigned char FreeWave[30001];
  90.  
  91. typedef long Time;                    /* in half milliseconds */
  92.  
  93. typedef unsigned char Wave[256];
  94. typedef Wave *WavePtr;
  95.  
  96.  
  97.  
  98. struct FFSynthRec {
  99.     short mode;
  100.     Fixed count;
  101.     FreeWave waveBytes;
  102. };
  103.  
  104. typedef struct FFSynthRec FFSynthRec;
  105. typedef FFSynthRec *FFSynthPtr;
  106.  
  107. struct Tone {
  108.     short count;
  109.     short amplitude;
  110.     short duration;
  111. };
  112.  
  113. typedef struct Tone Tone;
  114. typedef Tone Tones[5001];
  115.  
  116. struct SWSynthRec {
  117.     short mode;
  118.     Tones triplets;
  119. };
  120.  
  121. typedef struct SWSynthRec SWSynthRec;
  122. typedef SWSynthRec *SWSynthPtr;
  123.  
  124. struct FTSoundRec {
  125.     short duration;
  126.     Fixed sound1Rate;
  127.     long sound1Phase;
  128.     Fixed sound2Rate;
  129.     long sound2Phase;
  130.     Fixed sound3Rate;
  131.     long sound3Phase;
  132.     Fixed sound4Rate;
  133.     long sound4Phase;
  134.     WavePtr sound1Wave;
  135.     WavePtr sound2Wave;
  136.     WavePtr sound3Wave;
  137.     WavePtr sound4Wave;
  138. };
  139.  
  140. typedef struct FTSoundRec FTSoundRec;
  141. typedef FTSoundRec *FTSndRecPtr;
  142.  
  143. struct FTSynthRec {
  144.     short mode;
  145.     FTSndRecPtr sndRec;
  146. };
  147.  
  148. typedef struct FTSynthRec FTSynthRec;
  149. typedef FTSynthRec *FTSynthPtr;
  150.  
  151. struct SndCommand {
  152.     unsigned short cmd;
  153.     short param1;
  154.     long param2;
  155. };
  156.  
  157. typedef struct SndCommand SndCommand;
  158. typedef struct ModifierStub *ModifierStubPtr;
  159. typedef struct SndChannel *SndChannelPtr;
  160.  
  161. typedef pascal void (*SndCompletionProcPtr)(void);
  162. typedef pascal void (*SndModifierProcPtr)(SndChannelPtr chan, SndCommand *cmd, ModifierStubPtr mod);
  163. typedef pascal void (*SndCallBackProcPtr)(SndChannelPtr chan, SndCommand cmd);
  164.  
  165.  
  166.  
  167. struct SndChannel {
  168.     struct SndChannel *nextChan;
  169.     ModifierStubPtr firstMod;
  170.     SndCallBackProcPtr callBack;
  171.     long userInfo;
  172.     Time wait;                        /*The following is for internal Sound Manager use only.*/
  173.     SndCommand cmdInProgress;
  174.     short flags;
  175.     short qLength;
  176.     short qHead;                    /*next spot to read or -1 if empty*/
  177.     short qTail;                    /*next spot to write = qHead if full*/
  178.     SndCommand queue[stdQLength];
  179. };
  180.  
  181. typedef struct SndChannel SndChannel;
  182. struct ModifierStub {
  183.     struct ModifierStub *nextStub;
  184.     SndModifierProcPtr code;
  185.     long userInfo;
  186.     Time count;
  187.     Time every;
  188.     char flags;
  189.     char hState;
  190. };
  191.  
  192. typedef struct ModifierStub ModifierStub;
  193. struct SoundHeader {
  194.     Ptr samplePtr;                    /*if NIL then samples are in sampleArea*/
  195.     unsigned long length;
  196.     Fixed sampleRate;
  197.     unsigned long loopStart;
  198.     unsigned long loopEnd;
  199.     short baseNote;
  200.     char sampleArea[1];
  201. };
  202.  
  203. typedef struct SoundHeader SoundHeader;
  204. typedef SoundHeader *SoundHeaderPtr;
  205.  
  206. struct ModRef {
  207.     unsigned short modNumber;
  208.     long modInit;
  209. };
  210.  
  211. typedef struct ModRef ModRef;
  212. struct SndListResource {
  213.     short format;
  214.     short numModifiers;
  215.     ModRef modifierPart[1];         /*This is a variable length array*/
  216.     short numCommands;
  217.     SndCommand commandPart[1];        /*This is a variable length array*/
  218.     char dataPart[1];                /*This is a variable length array*/
  219. };
  220.  
  221. typedef struct SndListResource SndListResource;
  222. typedef SndListResource *SndListPtr;
  223.  
  224. /* User callable routines */
  225.  
  226. pascal void SetSoundVol();
  227. pascal void GetSoundVol();
  228. pascal void StartSound();
  229. pascal void StopSound();
  230. pascal Boolean SoundDone(); 
  231.  
  232. pascal OSErr SndDoCommand(chan, cmd, noWait)
  233.     SndChannelPtr        chan;
  234.     SndCommand            * cmd;
  235.     Boolean                noWait;
  236. extern 0xA803;
  237.  
  238.  
  239. pascal OSErr SndDoImmediate(chan, cmd)
  240.     SndChannelPtr        chan;
  241.     SndCommand            * cmd;
  242. extern 0xA804;
  243.  
  244.  
  245. pascal OSErr SndAddModifier(chan, modifier, id, init)
  246.     SndChannelPtr        chan;
  247.     ProcPtr                modifier;
  248.     short                id;
  249.     long                init;
  250. extern 0xA802;
  251.  
  252.  
  253. pascal OSErr SndNewChannel(chanVar, synth, init, userRoutine)
  254.     SndChannelPtr        * chanVar;
  255.     short                synth;
  256.     long                init;
  257.     ProcPtr                userRoutine;
  258. extern 0xA807;
  259.  
  260.  
  261. pascal OSErr SndDisposeChannel(chan, quietNow)
  262.     SndChannelPtr        chan;
  263.     Boolean                quietNow;
  264. extern 0xA801;
  265.  
  266.  
  267. pascal OSErr SndPlay(chan, sndHdl, async)
  268.     SndChannelPtr        chan;
  269.     Handle                sndHdl;
  270.     Boolean                async;
  271. extern 0xA805;
  272.  
  273.  
  274. pascal OSErr SndControl(id, cmdVar)
  275.     short                id;
  276.     SndCommand            * cmdVar;
  277. extern 0xA806;
  278.  
  279. #endif
  280.